from app import db
from app.models.proyecto import Proyecto
from app.models.entidad import Entidad


class Fase(db.Model):
    """
    Clase que representa la tabla fase de la base de datos
    """

    __tablename__ = 'fase'
    id = db.Column(db.Integer, primary_key=True)
    nombre = db.Column(db.String(50))
    posicion = db.Column(db.Integer)
    estado = db.Column(db.String(20))
    fechainicio = db.Column(db.Date)
    fechafin = db.Column(db.Date)
        
    
    proyecto_id = db.Column(None, db.ForeignKey("proyecto.id"), nullable=True)
    proyecto = db.relation(Proyecto, backref=db.backref('fases'))
    
    entidad_id = db.Column(None, db.ForeignKey("entidad.id"), nullable=True)
    entidad = db.relation(Entidad, backref=db.backref('entidad_fase'))
    
    __table_args__ = (db.UniqueConstraint('nombre', 'proyecto_id', name='faseProyecto'),
                     )
   
    
    def __init__(self, nombre=None, posicion=None, estado=None, fechainicio=None, fechafin=None, proyecto =None, entidad=None):
        """
        Constructor de la clase Fase
        :param nombre:
        Nombre de la fase
        :param posicion:
        posicion dentro del proyecto de la fase
        :param estado:
        estado de la fase
        :param fechainicio:
        fecha de inicio de la fase
        :param fechafin:
        fecha de finalizacion de la fase
        :param  proyecto:
        proyecto al que pertenece la fase
        """
        self.nombre = nombre
        self.posicion = posicion
        self.estado = estado
        self.fechainicio = fechainicio
        self.fechafin = fechafin
        self.proyecto = proyecto
        self.entidad = entidad
        
        

    def __repr__(self):
        return '<Fase %r>' % (self.nombre)
    
    def setNombre(self, nombre):
        """
        Setea el nombre de la fase
        :param nombre:
        nombre de la fase
        """
        self.nombre = nombre
        
    def setEstado(self, estado):
        """
        Setea el estado de la fase
        :param estado:
        estado de la fase
        """
        self.estado = estado
        
    def setPosicion(self, posicion):
        """
        Setea la posicion de la fase
        :param posicion:
        posicion de la fase
        """
        self.posicion = posicion

    def setFechainicio(self, fechainicio):
        """
        Setea la fecha de inicio de la fase
        :param fechainicio:
        fechainicio de la fase
        """
        
        self.fechainicio = fechainicio
        
    def setFechafin(self, fechafin):
        """
        Setea la fecha de fin de la fase
        :param fechafin:
        fechafin de la fase
        """
        self.fechafin = fechafin
 
        
    def setEntidad(self, entidad):
        """
        Setea la entidad de la fase
        :param entidad:
        entidad de la fase
        """
        self.entidad = entidad